#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>

#include <vector>

using namespace std;

//int main(void)
//
//{
//
//	vector<int>array;
//
//	array.push_back(100);
//
//	array.push_back(300);
//
//	array.push_back(300);
//
//	array.push_back(300);
//
//	array.push_back(300);
//
//	array.push_back(500);
//
//	vector<int>::iterator itor;
//
//	for (itor = array.begin(); itor != array.end(); itor++)
//
//	{
//
//		if (*itor == 300)
//
//		{
//
//			itor = array.erase(itor);
//
//		}
//
//	}
//
//	for (itor = array.begin(); itor != array.end(); itor++)
//
//	{
//
//		cout << *itor << " ";
//
//	}
//
//	return 0;
//
//}


//int main()
//
//{
//
//	int ar[] = { 1,2,3,4,5,6,7,8,9,10 };
//
//	int n = sizeof(ar) / sizeof(int);
//
//	vector<int> v(ar, ar + n);
//
//	cout << v.size() << ":" << v.capacity() << endl;
//
//	v.reserve(100);
//
//	v.resize(20);
//
//	cout << v.size() << ":" << v.capacity() << endl;
//
//	v.reserve(50);
//
//	v.resize(5);
//
//	cout << v.size() << ":" << v.capacity() << endl;
//
//}

//迭代器错误
void test_vector1()
{
	vector<int>V;
	V.push_back(1);
	V.push_back(2);
	V.push_back(3);
	V.push_back(4);
	auto it = V.begin();
	while (it != V.end())
	{
		if (*it % 2 == 0)
		{
			V.insert(it, *it * 2);
			//添加后，若扩容pos指针还指向原空间，造成野指针。
		}
		it++;
	}
	for (auto e : V)
	{
		cout << e << " ";
	}
	cout << endl;
}
void test_vector2()
{
	vector<int>V;
	V.reserve(10);
	V.push_back(1);
	V.push_back(2);
	V.push_back(3);
	V.push_back(4);
	auto it = V.begin();
	while (it != V.end())
	{
		if (*it % 2 == 0)
		{
			V.insert(it, *it * 2);
			//添加后，数据往后移，迭代器还指向原来位置，造成持续添加，达不到预期效果。
		}
		it++;
	}
	for (auto e : V)
	{
		cout << e << " ";
	}
	cout << endl;
}
//解决方案，迭代器加返回值
void test_vector3()
{
	vector<int>V;
	V.reserve(10);
	V.push_back(1);
	V.push_back(2);
	V.push_back(3);
	V.push_back(4);
	auto it = V.begin();
	while (it != V.end())
	{
		if (*it % 2 == 0)
		{
			it=V.insert(it, *it * 2);
			++it;
			++it;
		}
		else
		{
			++it;
		}
	}
	for (auto e : V)
	{
		cout << e << " ";
	}
	cout << endl;
}
int main()
{
	test_vector3();
	return 0;
}